ViewModelLocator ব্যবহার করে Dependency Injection করা

.NET MAUI এ Dependency Injection - ডট নেট এমআইইউআই (.NET MAUI) - Mobile App Development

373

Dependency Injection (DI) একটি ডিজাইন প্যাটার্ন যা অবজেক্টের নির্ভরশীলতা বাইরের উৎস থেকে ইনজেক্ট করার মাধ্যমে কোডের মডুলারিটি এবং টেস্টেবিলিটি বৃদ্ধি করে। ViewModelLocator একটি সাধারণ কৌশল যা MVVM (Model-View-ViewModel) ডিজাইন প্যাটার্নে ডিপেন্ডেন্সি ইনজেকশন পরিচালনা করতে ব্যবহৃত হয়। .NET MAUI এ DI কার্যকর করার জন্য ViewModelLocator খুবই সহায়ক, কারণ এটি আপনাকে ViewModel গুলোর জন্য ডিপেন্ডেন্সি সহজভাবে ইনজেক্ট করতে সহায়তা করে এবং ViewModel গুলি কমপ্লেক্সলি ম্যানেজ করার সুযোগ দেয়।


ViewModelLocator ব্যবহার করার সুবিধা:

  1. Centralized Dependency Management: সমস্ত ডিপেন্ডেন্সি এক জায়গায় সেন্ট্রালাইজ করা যায়।
  2. Testability: ViewModel গুলোর জন্য এক্সপ্লিসিটভাবে ডিপেন্ডেন্সি ইনজেক্ট করার মাধ্যমে টেস্টিং সহজ হয়ে যায়।
  3. Cleaner Code: DI-এর মাধ্যমে ViewModel এর অভ্যন্তরীণ ডিপেন্ডেন্সি ম্যানেজ করা সহজ হয় এবং কোড আরও পরিষ্কার থাকে।

ViewModelLocator কিভাবে কাজ করে:

  1. ViewModelLocator মূলত একটি ক্লাস যা আপনার ViewModel গুলোর জন্য ডিপেন্ডেন্সি ইনজেক্ট করার কাজ করে। এটি IOC (Inversion of Control) Container বা DI কন্টেইনারের সাথে কাজ করে, যেখানে আপনি প্রয়োজনীয় সার্ভিস বা ডিপেন্ডেন্সি ইনজেক্ট করেন।
  2. এটি সাধারণত App.xaml.cs ফাইলে ইনস্ট্যান্স তৈরি করা হয় এবং অ্যাপের সেলফ (Self) কনফিগারেশন পরিচালনা করে।

ViewModelLocator উদাহরণ:

আমরা একটি সাধারণ উদাহরণ তৈরি করবো যেখানে আমরা MainPageViewModel এবং ApiService ক্লাসের মধ্যে ডিপেন্ডেন্সি ইনজেকশন ব্যবহার করব।


Step 1: Define the Dependencies

প্রথমে আমরা একটি সেবা (service) ক্লাস তৈরি করি যা ডাটা রিটার্ন করবে। এখানে, আমরা একটি ApiService ক্লাস তৈরি করেছি।

ApiService.cs (Service Class)

public class ApiService
{
    public string GetData()
    {
        return "Hello from ApiService!";
    }
}

MainPageViewModel.cs (ViewModel Class)

public class MainPageViewModel : BindableObject
{
    private readonly ApiService _apiService;
    private string _message;

    public string Message
    {
        get => _message;
        set
        {
            _message = value;
            OnPropertyChanged();
        }
    }

    // Dependency Injection via constructor
    public MainPageViewModel(ApiService apiService)
    {
        _apiService = apiService;
        LoadData();
    }

    private void LoadData()
    {
        Message = _apiService.GetData();
    }
}

এখানে MainPageViewModel কন্সট্রাক্টরে ApiService ইনজেক্ট করা হয়েছে, যা ডিপেন্ডেন্সি ইনজেকশনের মাধ্যমে সরবরাহ করা হবে।


Step 2: Define the ViewModelLocator

এখন আমরা একটি ViewModelLocator ক্লাস তৈরি করবো যা আমাদের ViewModel-এ ডিপেন্ডেন্সি ইনজেক্ট করবে।

ViewModelLocator.cs (Locator Class)

public class ViewModelLocator
{
    public MainPageViewModel MainPageViewModel { get; }

    public ViewModelLocator()
    {
        // Dependency Injection
        var apiService = new ApiService();
        MainPageViewModel = new MainPageViewModel(apiService);
    }
}

এখানে ViewModelLocator ক্লাসের কন্সট্রাক্টর থেকে আমরা ApiService তৈরি করেছি এবং তা MainPageViewModel এ ইনজেক্ট করেছি। এর মাধ্যমে MainPageViewModel-এর ডিপেন্ডেন্সি ইনজেক্ট হয়েছে এবং আমরা এটি ViewModelLocator থেকে এক্সেস করতে পারব।


Step 3: Bind ViewModelLocator to the Application

এখন আমরা App.xaml.cs ফাইলে ViewModelLocator কে রেজিস্টার করব এবং আমাদের MainPage-এ সেট করে দেব।

App.xaml.cs (App Configuration)

public partial class App : Application
{
    public static ViewModelLocator ViewModelLocator { get; } = new ViewModelLocator();

    public App()
    {
        InitializeComponent();
        
        // Setting the BindingContext of MainPage to ViewModel
        MainPage = new MainPage
        {
            BindingContext = ViewModelLocator.MainPageViewModel
        };
    }
}

এখানে আমরা ViewModelLocator কে App.xaml.cs ফাইলে স্ট্যাটিকভাবে রেজিস্টার করেছি এবং MainPage-এর BindingContext হিসাবে সেট করেছি।


Step 4: Bind ViewModel to the View (MainPage.xaml)

এখন আমরা MainPage.xaml-এ ViewModel কে বাইন্ড করবো এবং UI-তে ডাটা প্রদর্শন করবো।

MainPage.xaml (View)

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             x:Class="MAUIApp.MainPage">
    
    <StackLayout Padding="10">
        <Label Text="{Binding Message}" 
               VerticalOptions="CenterAndExpand" 
               HorizontalOptions="CenterAndExpand" />
    </StackLayout>
</ContentPage>

এখানে, আমরা Message প্রপার্টি কে MainPageViewModel এর BindingContext হিসেবে সেট করেছি এবং Data Binding এর মাধ্যমে সেটি UI তে দেখাচ্ছি।


Step 5: Run the Application

এখন, আপনার অ্যাপটি রান করলে, MainPage-এ Message প্রপার্টি থেকে ডাটা দেখাবে, যা ApiService থেকে এসেছে। এতে দেখা যাবে, "Hello from ApiService!" এই টেক্সট।


সারাংশ:

  • ViewModelLocator ব্যবহার করে আপনি আপনার MVVM আর্কিটেকচারে Dependency Injection পরিচালনা করতে পারেন।
  • ViewModelLocator এক্সপ্লিসিটভাবে ViewModel গুলোর ডিপেন্ডেন্সি ইনজেক্ট করার জন্য একটি কেন্দ্রীকৃত পদ্ধতি প্রদান করে।
  • এতে Testability এবং Code Cleanliness বজায় থাকে, কারণ আপনি সহজেই আপনার ডিপেন্ডেন্সি গুলো এক জায়গায় ম্যানেজ করতে পারেন।

এটি .NET MAUI অ্যাপ্লিকেশনে DI ব্যবহারের একটি কার্যকর কৌশল।

Content added By
Promotion

Are you sure to start over?

Loading...